package com.yhm.myfootbollshow.demos.utils;

import cn.hutool.core.util.IdUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@Component
public class ImageUploadUtil {

    @Value("${upload.path}") // 从配置文件中读取上传路径
    private String uploadPath;

    /**
     * 上传图片并返回访问URL
     *
     * @param file 上传的图片文件
     * @return 图片的访问URL
     * @throws IOException 如果文件保存失败
     */
    public String uploadImage(MultipartFile file) throws IOException {
        // 检查 uploadPath 是否为 null
        if (this.uploadPath == null) {
            throw new IllegalArgumentException("uploadPath 不能为 null");
        }

        // 检查 file 是否为 null
        if (file == null) {
            throw new IllegalArgumentException("上传的文件不能为 null");
        }
        // 确保上传目录存在
        File uploadDir = new File(uploadPath);
        if (!uploadDir.exists()) {
            uploadDir.mkdirs();
        }

        // 生成唯一文件名
        String fileName = IdUtil.fastSimpleUUID() + "_" + file.getOriginalFilename();
        Path filePath = Paths.get(uploadPath, fileName);

        // 保存文件
        Files.copy(file.getInputStream(), filePath);

        // 返回访问URL
        return "/uploads/" + fileName;
    }


    /**
     * 上传多个图片并返回访问URL列表
     *
     * @param files 上传的图片文件列表
     * @return 图片的访问URL列表
     * @throws IOException 如果文件保存失败
     */
    public List<String> uploadImages(List<MultipartFile> files) throws IOException {
        // 检查 uploadPath 是否为 null
        if (this.uploadPath == null) {
            throw new IllegalArgumentException("uploadPath 不能为 null");
        }

        // 检查 files 是否为 null 或空
        if (files == null || files.isEmpty()) {
            throw new IllegalArgumentException("上传的文件列表不能为 null 或空");
        }

        // 确保上传目录存在
        File uploadDir = new File(uploadPath);
        if (!uploadDir.exists()) {
            uploadDir.mkdirs();
        }

        List<String> fileUrls = new ArrayList<>();

        for (MultipartFile file : files) {
            // 检查 file 是否为 null
            if (file == null) {
                throw new IllegalArgumentException("上传的文件不能为 null");
            }

            // 生成唯一文件名
            String fileName = IdUtil.fastSimpleUUID() + "_" + file.getOriginalFilename();
            Path filePath = Paths.get(uploadPath, fileName);

            // 保存文件
            Files.copy(file.getInputStream(), filePath);

            // 添加访问URL到列表
            fileUrls.add("/uploads/" + fileName);
        }

        return fileUrls;
    }

}
